<?php
/**
 * 异步http请求 管理
 *
 * @author    Alex Xun xunzhibin@expert.com
 * @version   1.0
 * @copyright (C) 2018 Jnexpert Ltd. All rights reserved
 * @file      .\common\request\Curl.php
 */

namespace app\common\request;

use think\Log;

/**
 * 异步http请求 类
 *
 * @author Alex Xun xunzhibin@jnexpert.com
 * @package common
 */
class Http
{
    /**
     * curl 请求
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     * @since 1.0
     *
     * @param string $url 请求链接
     * @param string $method 请求方式
     * @param array $param 请求参数
     *
     * @return array|bool
     */
    public function curl_request($url, $method, $param)
    {
        // 设置 请求 参数
        $request_param = [];
        switch(strtolower($method)) {
            case 'get':
                $request_param = [
                    'query' => $param
                ];
                break;
            case 'post':
                $request_param = [
                    'form_params' => $param
                ];
                break;
            case 'put':
            case 'delete':
                $request_param = [
                    'json' => $param
                ];
                break;
            default :
                break;
        }

        // 实例化 第三方库
        $client = new \GuzzleHttp\Client();
        // 请求
        $response = $client->request(strtoupper($method), $url, $request_param);

        // 请求 失败
        if($response->getStatusCode() !== 200) {
			Log::error(' curl_request_error code: ' . $response->getStatusCode());
            return false;
        }

        // 请求 成功
        $body = $response->getBody();
        $remainingBytes = $body->getContents();
        $data = json_decode($remainingBytes, true);

        return $data;
    }
}
